//package nm.aleksey.server;
//
//import java.util.List;
//
//import javax.persistence.EntityManager;
//import javax.persistence.Query;
//
//import nm.aleksey.domain.Author;
//import nm.aleksey.domain.Book;
//import nm.aleksey.domain.EMF;
//
//import com.google.web.bindery.requestfactory.shared.Locator;
//
//public class CopyOfAuthorLocator extends Locator<Author, Long> {
//  public static final EntityManager entityManager() {
//    return EMF.get().createEntityManager();
//  }
//
//  public void addBook(Author author, Book book) {
//    addBook(author.getId(), book);
//  }
//
//  public void addBook(Long id, Book book) {
//    EntityManager em = entityManager();
//    try {
//      Author a = em.find(Author.class, id);
//      Book b = new Book();
//      if (book == null) {
//        b.setIsdn("123-123-432");
//        b.setName("dsfsdf");
//        b.setAuthor(a);
//      }
//      a.getBooks().add(b);
//      em.merge(a);
//    } catch (Exception e) {
//      e.printStackTrace();
//    } finally {
//      em.close();
//    }
//  }
//
//  @Override
//  public Author create(Class<? extends Author> clazz) {
//    try {
//      return clazz.newInstance();
//    } catch (InstantiationException e) {
//      throw new RuntimeException(e);
//    } catch (IllegalAccessException e) {
//      throw new RuntimeException(e);
//    }
//  }
//
//  @Override
//  public Author find(Class<? extends Author> clazz, Long id) {
//    if (id == null) {
//      return null;
//    }
//    EntityManager em = entityManager();
//    try {
//      Author author = em.find(Author.class, id);
//      return author;
//    } catch (Exception e) {
//      e.printStackTrace();
//      return null;
//    } finally {
//      em.close();
//    }
//  }
//
//  public Author find(Long id) {
//    return find(Author.class, id);
//  }
//
//  public List<Author> findAll() {
//    EntityManager em = entityManager();
//    try {
//      Query q = em.createQuery("select a from Author a");
//      return q.getResultList();
//    } catch (Exception e) {
//      e.printStackTrace();
//      return null;
//    } finally {
//      em.close();
//    }
//  }
//
//  public List<Book> getBookList(Author author) {
//    return getBookList(author.getId());
//  }
//
//  public List<Book> getBookList(Long id) {
//    EntityManager em = entityManager();
//    try {
//      Query q = em.createQuery(
//          "select b from Book b where b.author.id = :authorId").setParameter(
//          "authorId", id);
//      return q.getResultList();
//    } catch (Exception e) {
//      e.printStackTrace();
//      return null;
//    } finally {
//      em.close();
//    }
//  }
//
//  @Override
//  public Class<Author> getDomainType() {
//    return Author.class;
//  }
//
//  @Override
//  public Long getId(Author domainObject) {
//    return domainObject.getId();
//  }
//
//  @Override
//  public Class<Long> getIdType() {
//    return Long.class;
//  }
//
//  @Override
//  public Object getVersion(Author domainObject) {
//    return domainObject.getVersion();
//  }
//
//  public void remove(Author author) {
//    EntityManager em = entityManager();
//    try {
//      Author attached = em.find(Author.class, author.getId());
//      em.remove(attached);
//    } catch (Exception e) {
//      e.printStackTrace();
//    } finally {
//      em.close();
//    }
//  }
//
//  public void save(Author author) {
//    EntityManager em = entityManager();
//    // EntityTransaction tx = em.getTransaction();
//    try {
//      // tx.begin();
//      em.merge(author);
//      // tx.commit();
//    } catch (Exception e) {
//      // tx.rollback();
//      e.printStackTrace();
//    } finally {
//      em.close();
//    }
//  }
//}
